home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / DELPHI32 / SYS_TOOL / MULTI020 / MPLOOP.PAS < prev    next >
Pascal/Delphi Source File  |  1993-09-07  |  754b  |  39 lines

  1. unit MPLoop;  { multitasking Loop-back pipe device }
  2. interface
  3. uses multi, mpipes;
  4.  
  5. procedure AttachLoopback(a,b : pPipe);
  6. { Start loopback task which copies from b to a }
  7.  
  8. implementation
  9.  
  10. type
  11.   pPipeArray = array[0..1] of pPipe;
  12.  
  13. procedure Loopback(var m); far;
  14. var
  15.   p : pPipeArray absolute m;
  16.   ch : char;
  17. begin
  18.   t^.hasexit := true;
  19.   p[0]^.NewOutputTask;
  20.   p[1]^.NewInputTask;
  21.   repeat
  22.     ch := p[1]^.Get;
  23.     if t^.poisoned or p[0]^.Put(ch) then break
  24.   until false;
  25.   p[0]^.NoMoreOutput;
  26.   p[1]^.NoMoreInput;
  27.   freemem(@p,8)
  28. end;
  29.  
  30. procedure AttachLoopback(a,b : pPipe);
  31. var p : ^pPipeArray;
  32. begin
  33.   getmem(p,8);
  34.   p^[0] := a; p^[1] := b;
  35.   Fork(Loopback,2048,p^{$IFDEF DEBUG},'Loopback'{$ENDIF})
  36. end;
  37.  
  38. end.
  39.